创建型设计模式

目录

工厂方法模式

抽象工厂模式

生成器模式

原型模式

单例模型

 工厂方法模式

public class FactoryMethod {
    public static void main(String[] args) {
        Factory factoryA = new FactoryA();
        factoryA.CreateProduct().info();

        Factory factoryB = new FactoryB();
        factoryB.CreateProduct().info();
    }


}

interface Factory {
    Product CreateProduct();
}

class FactoryA implements Factory {

    @Override
    public Product CreateProduct() {
        return new ProductA();
    }
}

class FactoryB implements Factory {

    @Override
    public Product CreateProduct() {
        return new ProductB();
    }
}

interface Product {
    public void info();
}

class ProductA implements Product {

    @Override
    public void info() {
        System.out.println("产品信息: A");
    }
}

class ProductB implements Product {

    @Override
    public void info() {
        System.out.println("产品信息: B");
    }
}

抽象工厂模式

public class AbstractFactory {
    public static void main(String[] args) {
        Factory factory1 = new Factory1();
        System.out.println("工厂1");
        factory1.CreateProductA().info();
        factory1.CreateProductB().info();

        System.out.println("-------------------------------------");

        Factory factory2 = new Factory2();
        System.out.println("工厂2");
        factory2.CreateProductA().info();
        factory2.CreateProductB().info();
    }
}

interface Factory {
    ProductA CreateProductA();

    ProductB CreateProductB();
}

class Factory1 implements Factory {
    @Override
    public ProductA CreateProductA() {
        return new ProductA1();
    }

    @Override
    public ProductB CreateProductB() {
        return new ProductB1();
    }
}

class Factory2 implements Factory {
    @Override
    public ProductA CreateProductA() {
        return new ProductA2();
    }

    @Override
    public ProductB CreateProductB() {
        return new ProductB2();
    }
}

interface ProductA {
    void info();
}

class ProductA1 implements ProductA {

    @Override
    public void info() {
        System.out.println("产品信息: A1");
    }
}

class ProductA2 implements ProductA {

    @Override
    public void info() {
        System.out.println("产品信息: A2");
    }
}

interface ProductB {
    void info();
}

class ProductB1 implements ProductB {

    @Override
    public void info() {
        System.out.println("产品信息: B1");
    }
}

class ProductB2 implements ProductB {

    @Override
    public void info() {
        System.out.println("产品信息: B2");
    }
}

生成器模式

public class BuilderPattern {
    public static void main(String[] args) {
        Director director = new Director();
        Builder builder1 = new Builder1();
        director.Construct(builder1);
        Product product1 = builder1.getResult();
        product1.show();

        Builder builder2 = new Builder2();
        director.Construct(builder2);
        Product product2 = builder2.getResult();
        product2.show();
    }
}

class Director {
    public void Construct(Builder builder) {
        builder.BuildPart();
    }
}

abstract class Builder {
    public abstract void BuildPart();

    public abstract Product getResult();
}

class Builder1 extends Builder {
    Product product = new Product();

    @Override
    public void BuildPart() {
        product.Add("A");
        product.Add("B");
        product.Add("C");
        product.Add("D");
        product.Add("E");
        product.Add("F");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

class Builder2 extends Builder {
    Product product = new Product();

    @Override
    public void BuildPart() {
        product.Add("A");
        product.Add("B");
        product.Add("C");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

class Product {
    List<String> parts = new ArrayList<>();

    public void Add(String part) {
        parts.add(part);
    }

    public void show() {
        System.out.println("产品的组成");
        for (String part : parts) {
            System.out.println(part + " ");
        }
        System.out.println("\n");
    }
}

原型模式

public class BuildPattern {
    public static void main(String[] args) {
        Product product1 = new Product(1,9.9);
        System.out.println("product1\n id: "+product1.getId()+" price: "+ product1.getPrice());
        Product product2 = (Product) product1.Clone();
        System.out.println("product2\n id: "+product2.getId()+" price: "+ product2.getPrice());
    }
}

interface Prototype {
    Object Clone();
}


class Product implements Prototype {
    private int id;
    private double price;

    public Product() {
    }

    public Product(int id, double price) {
        this.id = id;
        this.price = price;
    }

    public int getId() {
        return id;
    }

    public double getPrice() {
        return price;
    }

    @Override
    public Object Clone() {
        Product product = new Product();
        product.id = this.id;
        product.price = this.price;
        return product;
    }
}

单例模型

public class SingletonPattern {
    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();
        Singleton singleton3 = Singleton.getInstance();

        System.out.println(singleton1.getNumber() + " " + singleton2.getNumber() + " " + singleton3.getNumber());
        singleton1.setNumber(1);
        System.out.println(singleton1.getNumber() + " " + singleton2.getNumber() + " " + singleton3.getNumber());

    }
}

class Singleton {
    private int number = 10;

    public void setNumber(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }

    private static Singleton instance = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return instance;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值