单例设计模式
解决的就是在程序运行过程中,一个类最多只能创建一个对象 的问题;
采用一定的方法保证整个系统在运行过程中,对某个类只存在一个对象实例
并且该类只提供一个取得该对象实例的方法 。
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());
}
}