文档章节

工厂模式

u
 udbwcso
发布于 2016/03/23 14:32
字数 503
阅读 69
收藏 2

简单工厂并不是设计模式,可以说是一种编程习惯.工厂方法模式,抽象工厂模式都属于对象创建型模式.

1.简单工厂

public abstract class Product {
    abstract void prepare();

    abstract void pack();
}
public class ProductA extends Product{
    public void prepare() {
    }

    public void pack() {
    }
}
public class ProductB extends Product{
    public void prepare() {

    }

    public void pack() {

    }
}
public class SimpleProductFactory {

    public Product createProduct(String type){
        if("productA".equals(type)){
            return new ProductA();
        }else if("productB".equals(type)){
            return new ProductB();
        }
        return null;
    }
}
public class Client {
    public static void main(String[] args) {
        SimpleProductFactory factory = new SimpleProductFactory();
        Product product = factory.createProduct("productA");
        product.prepare();
        product.pack();
    }
}

2.工厂方法模式

通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目地.工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类.但每新增一个新产品时就需要增加两个类.

public abstract class Product {
    abstract void prepare();

    abstract void pack();
}
public abstract class Creator {
    public Product orderProduct(){
        Product product = factoryMethod();
        product.prepare();
        product.pack();
        return product;
    }

    protected abstract Product factoryMethod();
}
public class ConcreteProduct extends Product{
    void prepare() {
    }

    void pack() {
    }
}
public class ConcreteCreator extends Creator{

    protected Product factoryMethod() {
        return new ConcreteProduct();
    }
}
public class Test {
    public static void main(String[] args) {
        Creator creator = new ConcreteCreator();
        Product product = creator.orderProduct();
    }
}

3.抽象工厂模式

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类.允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际产出的具体产品是什么。这样一来,客户就可以从具体的产品中被解耦。它的优点是隔离了具体类的生成,使得客户端不需要知道什么被创建了,而缺点就在于新增新的行为会比较麻烦,因为当添加一个新的产品对象时,需要更加需要更改接口及其下所有子类。

© 著作权归作者所有

共有 人打赏支持
u
粉丝 80
博文 66
码字总数 15709
作品 0
武汉

暂无文章

区块链教程以太坊源码分析core-state源码分析(一)

兄弟连区块链教程以太坊源码分析core-state源码分析,core/state 包主要为以太坊的state trie提供了一层缓存层(cache) database主要提供了trie树的抽象,提供trie树的缓存和合约代码长度的缓...

兄弟连区块链入门教程
10分钟前
0
0
使用putty上传文件

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: 使用putty上传文件 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::linux 用户名 set linux_us......

shzwork
11分钟前
1
0
摹客首家发布Adobe XD插件

10月19日,摹客iDoc发布了支持Adobe XD的插件,这是中国国内首款基于Adobe XD 正式API的插件。 设计师在Adobe XD 中安装并使用此插件,可以将设计稿上传到摹客iDoc,并使用iDoc的全部协作设计...

mo311
11分钟前
0
0
MetInfo最新网站漏洞如何修复以及网站安全防护

metinfo漏洞于2018年10月20号被爆出存在sql注入漏洞,可以直接拿到网站管理员的权限,网站漏洞影响范围较广,包括目前最新的metinfo版本都会受到该漏洞的攻击,该metinfo漏洞产生的主要原因是...

网站安全
11分钟前
0
0
git统计代码行数

$ npm install -g cloc$ cloc . 2193 text files. 1533 unique files. 760 files ignored.github.com/AlDanial/cloc v 1.78 ......

moon888
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部