设计模式(一)工厂模式(创建型)

简单工厂模式

一个抽象产品类,可以派生出多个具体产品类;

一个具体工厂类,可以创建多个具体产品的实例。

抽象产品类定义

public abstract class Sender {

    void send(){

    };

}

具体产品类定义

邮件产品类

public class MailSender extends Sender{

    public void send(){
      System.out.println("Mail Sender!");
    }
}

短信产品类

public class SmsSender extends Sender{

    public void send(){
          System.out.println("Sms Sender!");
    }

}

简单工厂类

public class SimpleFactory {

    public static MailSender createMailSender(){
        return new MailSender();
    }

    public static SmsSender createSmsSender(){
        return new SmsSender();
    }

}

测试类

public class SimpleFactoryTest {

    public static void main(String[] args) {
        Sender mailSender = SimpleFactory.createMailSender();
        mailSender.send();

        Sender smsSender = SimpleFactory.createSmsSender();
        smsSender.send();
    }

}

工厂方法模式

一个抽象产品类,可以派生出多个具体产品类;

一个抽象工厂类,可以派生出多个具体工厂类;

每个具体工厂类只能创建一个具体产品类的实例。

抽象产品类定义

public abstract class Fruit {

    void print(){

    };

}

具体产品类定义

public class Apple extends Fruit{

    public void print(){
        System.out.println("apple");
    }

}
public class Pear extends Fruit{

    public void print(){
        System.out.println("pear");
    }

}

工厂方法抽象类定义

public abstract class Factory {

    abstract Fruit create();

}

工厂方法具体工厂类定义:

public class AppleFactory extends Factory{

    public Fruit create(){
        return new Apple();
    }

}
public class PearFactory extends Factory{

    public Fruit create(){
        return new Pear();
    }

}

测试类

public class MethodFactoryTest {

    public static void main(String[] args) {
        Factory appleFactory = new AppleFactory();
        Fruit apple = appleFactory.create();
        apple.print();

        Factory pearFactory = new PearFactory();
        Fruit pear = pearFactory.create();
        pear.print();
    }

}

抽象工厂模式

多个抽象产品类,每个抽象产品类可以派生出多个具体的产品类;

一个抽象工厂类,可以派生出多个具体工厂类;

每个具体工厂类可以创建多个具体产品类的实例。

抽象产品类定义

public abstract class Fruit {

    void print(){

    };

}
public abstract class Car {

    void print(){

    };

}

具体产品类定义

public class Apple extends Fruit{

    public void print(){
        System.out.println("apple");
    }

}
public class Pear  extends Fruit{

    public void print(){
        System.out.println("pear");
    }

}
public class Bmw extends Car{

    public void print(){
        System.out.println("bmw");
    }

}
public class Buick extends Car{

    public void print(){
        System.out.println("buick");
    }

}

抽象工厂抽象类定义

public abstract class AbstractFactory {

    abstract Fruit createFruit();

    abstract Car createCar();

}

抽象工厂具体工厂类定义

public class BmwAppleFactory extends AbstractFactory{

    public Fruit createFruit(){
        return new Apple();
    }

    public Car createCar(){
        return new Bmw();
    }

}
public class BuickPearFactory extends AbstractFactory{

    public Fruit createFruit(){
        return new Pear();
    }

    public Car createCar(){
        return new Buick();
    }

}

测试类

public class AbstractFactoryTest {

    public static void main(String[] args) {
        AbstractFactory bmwAppleFactory = new BmwAppleFactory();
        Car car1 = bmwAppleFactory.createCar();
        Fruit fruit1 = bmwAppleFactory.createFruit();
        car1.print();
        fruit1.print();

        AbstractFactory buickPearFactory = new BuickPearFactory();
        Car car2 = buickPearFactory.createCar();
        Fruit fruit2 = buickPearFactory.createFruit();
        car2.print();
        fruit2.print();
    }

}

工厂方法和抽象工厂的区别:

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。

工厂方法模式的具体工厂类只能创建一个具体产品的实例,而抽象工厂模式可以创建多个。

时间: 2024-08-02 20:57:39

设计模式(一)工厂模式(创建型)的相关文章

设计模式(三): FACTORY工厂模式 -- 创建型模式

1.定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类. 2.适用场景 1.第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来.Java Collection中的iterator() 方法即属于这种情况. 2.第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给

设计模式(四):SIMPLE FACTORY简单工厂模式 -- 创建型模式

1.定义 简单工厂模式又称静态工厂方法模式.重命名上就可以看出这个模式一定很简单.它存在的目的很简单:定义一个用于创建对象的接口. 2.适用场景 如果一个客户要一款宝马车,一般的做法是客户去创建一款宝马车,然后拿来用.后来出现工业革命.用户不用去创建宝马车.因为客户有一个工厂来帮他创建宝马.想要什么车,这个工厂就可以建.比如想要320i系列车.工厂就创建这个系列的车.即工厂可以创建产品. 3.评价 优点: 工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体

设计模式(一): abstract factory抽象工厂模式 -- 创建型模式

1.定义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.适用场景 1.一个系统要独立于它的产品创建.组合和表示. 2.一个系统要由多个产品系列中的一个来配置. 3.当你要强调一系列相关的产品对象的设计以便进行联合使用. 4.当你提供一个产品类库,而只想显示它们的接口而不是实现. 3.评价 1.它分离了具体的类 2.它使得易于交换产品系列 3.它有利于产品的一致性 4.难以支持新种类的产品 5."开放-封闭"原则要求系统对扩展开放,对修改封闭.通过扩展达到增

设计模式之简单工厂模式(创建型)

定义 简单工厂模式又称静态工厂模式.可以根据参数的不同返回不同类的实例.定义一个类来创建其它类的实例. 角色 简单工厂模式包含如下角色 Factory:工厂角色 Product:抽象产品角色 ConcreteProduct:具体产品角色 简单实例 public abstract class Produce{ public abstract void m1()'' } public class ConcreteProduct extends Produce{ public void m1(){}

设计模式之建造者模式(创建型)

模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是将组件和组件的组件过程分开,然后一步一步建造一个复杂的对象.所以建造者模式又叫生成器模式. 建造者模式类图 模式结构 建造者模式包含如下角色 Builder:抽象建造者 ConcreteBuilder:具体建造者 Director:指挥者 Product:产品角色 如果系统只需要一个具体的建造者类的时候,可以省略抽象建造者,有时候指挥者类也可以省略,让建造者类同时充当指挥者和建造者 简单

简单工厂模式---创建型模式

简单工厂模式是类的创建模式,由一个参数(产品的类型)来判断创建对应的产品实例. 下面以登入为例:域名登入 或 密码登入等(有各种登入方式,需要一个抽象类,以供具体登入类实现) /****************接口类************************/ package simpleFactoryType; /**     * 登入接口,以供各种登入方式实现接口     * (在工厂模式中,实现该登入接口的相当于各种对应产品)     * @author dxx     *    *

浅析设计模式(六)——创建型模式之Abstract-Factory(抽象工厂模式)

抽象工厂模式Abstract-Factory 本文的套路: 抽象工厂模式的定义 抽象工厂模式的参与者及其角色 抽象工厂模式的类图 抽象工厂模式的示例 参考 抽象工厂模式的定义 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类. 前面[浅析设计模式(四)--创建型模式之Simple-Factory(简单工厂方法,非设计模式)]中介绍的简单工厂方法,虽然已经对变化的部分进行了封装,但是这里只由一个对象负责所有的具体类的实例化,因此每次有新增对象类型时,都需要改变工厂的源码进行扩展.

设计模式(六):Singleton 单件模式 -- 创建型模式

1.定义 当需要控制一个类的实例数量且调用者可以从一个公共的访问点访问时. 2.适用场景 1. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时. 2. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时. 3.评价 优点: 1. 对唯一实例的受控访问, 因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它. 2. 缩小名空间,Singleton模式是对全局变量的一种改进.它避免了那些存储唯一实例的全局变量污染名空

设计模式(五):PROTOTYPE原型模式 -- 创建型模式

1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.适用场景 原型模式的主要思想是基于现有的对象克隆一个新的对象出来,一般是有对象的内部提供克隆的方法,通过该方法返回一个对象的副本,这种创建对象的方式,相比我们之前说的几类创建型模式还是有区别的,之前的讲述的工厂模式与抽象工厂都是通过工厂封装具体的new操作的过程,返回一个新的对象,有的时候我们通过这样的创建工厂创建对象不值得,特别是以下的几个场景的时候,可能使用原型模式更简单也效率更高. • 1)当一个系统应该独立于

设计模式(二): BUILDER生成器模式 -- 创建型模式

1.定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 2.适用场景 1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 2. 当构造过程必须允许被构造的对象有不同表示时. 3.评价 1. 它使你可以改变一个产品的内部表示. Builder对象提供给导向器一个构造产品的抽象接口.该接口使得生成器可以隐藏这个产品的表示和内部结构.它同时也隐藏了该产品是如何装配的.因为产品是通过抽象接口构造的,你在改变该产品的内部表