栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

经典设计模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

经典设计模式

创建型 模式 简单工厂
class Factory {
    public static Product createProduct(String type) {
        Product productInstance = null;

        switch (type) {
            case "A":
                productInstance = new ProductA();
                break;
            case "B":
                productInstance = new ProductB();
                break;
            default:
                System.out.println("no this type")
                break;
        }
        return productInstance;
    }
}

abstract class Product {
    public abstract void info();
}

class ProductA extends Product {
    @Override // 方法重写
    public void info() {
        System.out.println("this is AAA")
    }
}

class ProductB extends Product {
    @Override
    public void info() {
        System.out.println("this is BBB")
    }
}

工厂方法
interface Factory{
    public 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("this is AAA")
    }
}

class ProductB implements Product {
    @Override
    public void info() {
        System.out.println("this is BBB")
    }
}
抽象工厂
interface Factory{
    public AbstractProductA CreateProductA();
    public AbstractProductB CreateProductB();
}

class ConcreateFactory1 implements Factory {
    @Override
    public AbstractProductA CreateProductA() {
        return new ProductA1();
    }

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

class ConcreateFactory2 implements Factory {
    @Override
    public AbstractProductA CreateProductA() {
        return new ProductA2();
    }

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

interface AbstractProductA {
    public void info();
}

interface AbstractProductB {
    public void info();
}

class ProductA1 implements AbstractProductA {
    @Override // 方法重写
    public void info() {
        System.out.println("this is A1")
    }
}
class ProductA2 implements AbstractProductA {
    @Override // 方法重写
    public void info() {
        System.out.println("this is A2")
    }
}

class ProductB1 implements AbstractProductB {
    @Override // 方法重写
    public void info() {
        System.out.println("this is B1")
    }
}
class ProductB2 implements AbstractProductB {
    @Override // 方法重写
    public void info() {
        System.out.println("this is B2")
    }
}
生成器


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 productInstance = new Product();

    @Override
    public void BuildPart() {
        productInstance.SetFeilds("tom", "man") //初始化方案一
    }

    @Override
    public Product getResult() {
        return Product
    }

}

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

    @Override
    public void BuildPart() {
        productInstance.SetFeilds("cat","woman") //初始化方案二
    }

    @Override
    public Product getResult() {
        return Product
    }

}

class Product {
    public String name = "";
    public String sex = "";

    public void SetFeildsOfName(String caller, String gender) {
        this.name = caller
        this.sex = gender
    }

    public void show() {
        System.out.println(this)
    }
}

原型实例
interface Prototype {
    public Object Clone();
}

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

    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 obj =  new Product();
        obj.id = this.id;
        obj.price = this.price;

        return obj;
    }
}


单例


class Singleton{
    // 这一步是为了确保 只能有一个实例, 即 类名的 同名方法 如果是 private, 则不能通过 new 的方式创建对象
    private Singleton(){}  

    // 静态方法 只能使用 静态变量, 所以这里 将 instance 设置为 静态变量
    private static Singleton instance = new Singleton();

    // 该方法  就是 全局访问点
    public static Singleton getInstance() {
        return instance
    }
}

结构性 模式 适配器


class USB {
    public void Request() {
        System.out.println("USB")
    }
}

class Adapter extends USB {
    private TypeC typeC = new TypeC();

    @Override
    public void Request() {
        typeC.SpecialRequest();
    }
}

class TypeC {
    public void SpecialRequest() {
        System.out.println("TyoeC")
    }
}

桥接


//People接口类
public interface People { 
    String getSale();
}

// 儿童类
public class Children implements People {
    @Override
    public String getSale() {
        return "0.6"; //儿童票6折
    }
}

// 老人类
public class OlderPeople implements People {
    @Override
    public String getSale() {
        return "0.5"; // 老人票5折
    }
}

// 门票接口类
public interface Tickets {
    int getMoney();
}

// A景区门票类
public class ATickets implements Tickets{

    private People people;

    public ATickets(People people) {
        this.people = people;
    }

    @Override
    public int getMoney() {
        String sale = people.getSale(); // 获得折扣
        BigDecimal saleBigDecimal = new BigDecimal(sale); // java小数计算会丢失精度,要用BigDecimal来计算
        BigDecimal ticketsBigDecimal = new BigDecimal("100"); // a景区门票原价100
        return ticketsBigDecimal.multiply(saleBigDecimal).intValue(); // 原价门票乘以折扣
    }
}

// B景区门票类
public class BTickets implements Tickets{

    private People people;

    public BTickets(People people) {
        this.people = people;
    }

    @Override
    public int getMoney() {
        String sale = people.getSale(); // 获得折扣
        BigDecimal saleBigDecimal = new BigDecimal(sale); // java小数计算会丢失精度,要用BigDecimal来计算
        BigDecimal ticketsBigDecimal = new BigDecimal("150"); // b景区门票原价100
        return ticketsBigDecimal.multiply(saleBigDecimal).intValue(); // 原价门票乘以折扣
    }
}

行为性 模式
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874135.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号