面向对象——设计模式(创建型)

抽象工厂


java 复制代码
public class AbstractFactory {
    public static void main(String[] args){
        Factory factory1=new Factory1();

        ProductA productA1=factory1.createProductA();
        productA1.info();

        ProductB productB1=factory1.createProductB();
        productB1.info();


        Factory factory2=new Factory2();

        ProductA productA2=factory2.createProductA();
        productA2.info();

        ProductB productB2=factory2.createProductB();
        productB2.info();



    }
}


    interface ProductA{
        public void info();
    }
    interface ProductB{
        public 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");
        }
    }
    class ProductB1 implements ProductB{
        @Override
        public void info() {
            System.out.println("产品的信息:B1");
        }
    }
    class ProductB2 implements ProductB{
        @Override
        public void info() {
            System.out.println("产品的信息:B2");
        }
    }
    interface Factory{
        public ProductA createProductA();
        public 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();
        }
    }

生成器(Builder)

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不用的表示。

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class BuilderModel
{
    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");
    }

    @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");
        product.Add("d");
    }

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


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

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

    public void show(){
        System.out.println("产品的组成:");
        for(String s:parts)
            System.out.print(s+"");

        System.out.print("\n");
    }

}

原型


java 复制代码
public class PrototypeModel {
    public static void main(String[] args){
        Product product1=new Product(2022,5.21);
        System.out.println(product1.getID()+" "+product1.getPrice());


        product1.Clone();

        Product product2=(Product) product1.Clone();
        System.out.println(product2.getID()+" "+product2.getPrice());
    }


}

interface Prototype{
    public 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 object=new Product();
        object.id=this.id;
        object.price=this.price;


        return object;
    }
}

单例模式

java 复制代码
public class SingletonModel{
    public static void main(String[] args){
        Singleton singleton1=Singleton.getInstance();
    }

}


class Singleton{

    
    private static Singleton instance=new Singleton();
    private Singleton(){}    //仅有唯一一个实例

    public static Singleton getInstance(){
        return instance;
    }
}
相关推荐
Jing_jing_X4 小时前
Spring 自动注入是怎么实现的?从 @Component 到 @Autowired 的完整流程
java·后端·spring
WaWaJie_Ngen4 小时前
【设计模式】代理模式(Proxy)
设计模式·代理模式
god004 小时前
chromium项目中添加源文件(BUILD.gn项目中添加源文件)
java·服务器·前端
LL_break4 小时前
线程3 JavaEE(阻塞队列,线程池)
java·开发语言·java-ee·线程·线程池·阻塞队列
镜花水月linyi4 小时前
解锁AQS
java·后端·面试
用户41659673693554 小时前
Android 性能调优与故障排查:ADB 诊断命令终极指南
android
沐怡旸4 小时前
【底层机制】【Android】本地Socket 对比 Binder 以及在 Android系统中的应用
android·面试
gAlAxy...4 小时前
面试(六)——Java IO 流
java·面试·职场和发展
狂团商城小师妹4 小时前
JAVA无人共享台球杆台球柜系统球杆柜租赁系统源码支持微信小程序
java·开发语言·微信小程序·小程序