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

抽象工厂


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;
    }
}
相关推荐
jiankeljx14 分钟前
Java实战:Spring Boot application.yml配置文件详解
java·网络·spring boot
cyforkk16 分钟前
Java 开源项目指南:如何规范地发布首个 GitHub Release
java·开源·github
qqty121716 分钟前
Java进阶学习之路
java·开发语言·学习
是苏浙22 分钟前
初识集合框架
java·数据结构
Zzxy24 分钟前
Spring Boot 参数校验
java·spring boot
黑眼圈子30 分钟前
总结一下用Java做算法的常用类和方法
java·开发语言·算法
Magic--41 分钟前
深入解析管道:最基础的进程间通信(IPC)实现
java·服务器·unix
架构师沉默1 小时前
为什么国外程序员都写独立博客,而国内都在公众号?
java·后端·架构
带刺的坐椅1 小时前
SolonCode v2026.4.1 发布(比 ClaudeCode 简约的编程智能体)
java·ai·llm·agent·solon-ai·claudecode·soloncode
殷紫川1 小时前
从单体到亿级流量:登录功能全场景设计指南,踩过的坑全给你填平了
java