目录
工厂方法模式
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;
}
}