文档章节

工厂模式

u
 udbwcso
发布于 2016/03/23 14:32
字数 503
阅读 68
收藏 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
粉丝 77
博文 66
码字总数 15709
作品 0
武汉

暂无文章

(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
13
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部