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

抽象工厂


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;
    }
}
相关推荐
蝎子莱莱爱打怪3 小时前
OpenClaw 从零配置指南:接入飞书 + 常用命令 + 原理图解
java·后端·ai编程
狼爷5 小时前
Go 没有 override?别硬套继承!用接口+嵌入,写更清爽的“覆盖”逻辑
java·go
BoomHe5 小时前
Now in Android 架构模式全面分析
android·android jetpack
小兔崽子去哪了7 小时前
Java 自动化部署
java·后端
ma_king7 小时前
入门 java 和 数据库
java·数据库·后端
后端AI实验室7 小时前
我用Cursor开发了3个月,整理出这套提效4倍的工作流
java·ai
码路飞11 小时前
GPT-5.3 Instant 终于学会好好说话了,顺手对比了下同天发布的 Gemini 3.1 Flash-Lite
java·javascript
SimonKing12 小时前
OpenCode AI编程助手如何添加Skills,优化项目!
java·后端·程序员
二流小码农12 小时前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos