Java设计模式——单例设计模式、模板设计模式、简单工厂设计模式

6 篇文章 0 订阅

单例设计模式

解决的就是在程序运行过程中,一个类最多只能创建一个对象 的问题;
采用一定的方法保证整个系统在运行过程中,对某个类只存在一个对象实例
并且该类只提供一个取得该对象实例的方法 。

1.只有一个实例
2.必须自己建好唯一实例
3.必须对外提供唯一实例

就像 LoggerFactory.getLogger()。
通过一个static方法获取唯一实例。
而不能new

设计细节
(1)构造器私有private,外部就无法使用new构造,但是内部方法仍然可以。
(2)设置一个静态方法用于返回在内部创建好的对象实例 。
(3)用于返回的对象变量必须是static,这样就能保证只建立一次实例(会放在静态域中)

饿汉式(我觉得这个比较好理解)

模板:按照模板来设计就好

class Ye11
{   /*#######正常的一般的类属性*/
      private int age;
      private String name;
     
     /* 特殊的一个静态对象变量,返回本类的唯一对象*/
     static Ye11 ye11_shili=new Ye11();
     
     /*设计私有的构造器,参数列表随意你定*/
     private Ye11()
     {
     this.age=19;
     this.name="叶茂鑫";
     }
     /*设计一个静态方法返回唯一对象/
     static Ye11 getYe11()
     {
     return ye11_shili;           //这个唯一实例在静态域中;
     }
     /*其他一些方法*/
     
}
懒汉式:
class Ye11{
    private int age=10;
     private  String name;
     static  Ye11 ye11=null;         //这里换了
    private Ye11()
    {
        this.age=19;
        this.name="叶茂鑫";
    }
    public static Ye11 getYe11(){
        if (ye11==null)         //这里简单的换了
        {
            ye11=new Ye11();
        }
        return ye11;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

模板方法设计模式

很简单的抽象类和子类关系

简单给个例子就好

abstract  class phone{        //模板类
    
   public abstract int getPrice();
    public String getLocate(){
        return "China";
    }
}

class HUAWEI extends phone
{                                                //子类
    String name="HUAWEI";
    int Price=5000;
    public  int getPrice()          //实现方法
    {
        return Price;
    }
}

接口与简单工厂模式

接口

一个类实现多个接口
接口也可以继承其他接口
接口与实现类之间也存在多态
特别强调一点:
接口中的方法都是默认public
所以子类中对应方法必须也是public

工厂方法

是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象 。
工厂方法模式包含四个部分:
1.抽象产品:产品对象同一的基类,或者是同一的接口。
2.具体的产品:各个不同的实例对象类
3.抽象工厂:所有的子类工厂类的基类,或是同一的接口
4.具体的工厂子类:负责每个不同的产品对象的实际创建

抽象工厂规定自己会产生抽象产品
多态
具体工厂自己选择具体产品

interface phone{        //抽象产品

   public abstract int getPrice();

}

class HUAWEI implements phone     //具体产品
{
    String name="HUAWEI";
    int Price=5000;
    public  int getPrice()
    {
        return Price;
    }
}
class Apple implements   phone       //具体产品
{
    String name="Apple";
    int Price=2000;
    public  int getPrice()
    {
        return Price;
    }
}

interface PhoneFactory       //抽象工厂
{
    phone getPhone();
}

class HUAWEIfactory implements PhoneFactory    //具体工厂
{
    public phone getPhone()
    {
        return new HUAWEI();
    }

}
class AppleFactory implements PhoneFactory   //具体工厂
{
    public phone getPhone()           
    {
        return new Apple();
    }
}

public  class test
        {
            public static void main(String []args)
            {
                 PhoneFactory factory=new HUAWEIfactory(); 
                 phone p20=factory.getPhone();            //注意看使用的多态特性
                 System.out.println(p20.getPrice());
            }
        }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值