工厂模式
博客专区 > udbwcso 的博客 > 博客详情
工厂模式
udbwcso 发表于2年前
工厂模式
  • 发表于 2年前
  • 阅读 65
  • 收藏 2
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 设计模式 工厂模式 简单工厂 工厂方法模式 抽象工厂模式

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

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.抽象工厂模式

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

共有 人打赏支持
粉丝 72
博文 34
码字总数 15570
×
udbwcso
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: