java设计模式

设计模式:
设计模式基本原则:
S:单一职责原则
O:开放关闭原则
L:里氏替换原则
    抽象
只要父类能出现的地方子类就可以出现,且替换为子类不会产生错误或异常
主要继承、多态
I:接口隔离原则


D:依赖倒置原则
   接口或抽象类
   面向接口编程或面向抽象编程
   依赖通过抽象产生
   
SOLID 
抽象、单一职责、最小化


最少知识原则(迪米特原则)


一、单例模式
1.确保某个类有且只有一个对象
实现单例模式的关键点:
(1)构造函数不对外开放,一般为private
(2)通过一个静态方法或者枚举返回单例类对象
(3)保证多线程环境下单例类的对象有且只有一个
(4)确保单例类对象在反序列化时不会重新构建对象
2.单例模式的写法
(1)饿汉单例模式
    在声明的时候被初始化 
    public class A{
 private static final A a = new A();
 private A(){
 }
 //公有的静态函数,对外暴露获取单利对象的接口
 public static A getA(){
  return a;
 }
    }
A 为静态对象,并且在声明的时候被初始化,保证了对象的唯一性
(2)懒汉模式
     声明一个静态对象,并且在用户第一次调用getInstance时初始化
public class Singleton{
   private static Singleton instance;
private Singleton(){
}

public static synchronized Singleton getInstance(){
  if(instance == null){
     instance = new Singleton();
  }
  return instance;
}
}
同步会造成不必要的开销,一般不建议使用
(3)Double Check Lock模式
    能在需要时才初始化实例,又能保证线程安全,且单例对象初始化后调用getInstance不进行同步锁
    public class Singleton{
   private static Singleton instance = null;
private Singleton(){
}

public static Singleton getInstance(){
  //为了避免不必要的同步
  if(instance == null){
     synchronized(Singleton.class){
 //在null时创建实例
 if(instance == null){
    //分配内存;调用构造函数,初始化成员字段;对象指向分配内存空间
    instance = new Singleton();
 }
}      
  }
  return instance;
}
}

volatile关键字
volatile是一个类型修饰符(type specifier),就像大家更熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量
(4)静态内部类单例模式
推荐使用
第一次调用时才会初始化
public class Singleton{
private Singleton(){
}

public static  Singleton getInstance(){
  return SingletonHolder.sinstance;
}

private static class SingletonHolder{
  private static final Singleton sinstance = new Singleton();
}
}
(5)枚举单例
(6)容器单例


各种系统服务会注册到ContextImpl的一个map容器中,然后通过服务的字符串键值来取


二、Builder模式
  顾客购买套餐 
抽象建造者角色(Builder):——
        为创建一个Product对象的各个部件指定抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此角色规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
具体建造者(ConcreteBuilder)————“餐厅员工”
1)实现Builder的接口以构造和装配该产品的各个部件。即实现抽象建造者角色Builder的方法。
2)定义并明确它所创建的表示,即针对不同的商业逻辑,具体化复杂对象的各部分的创建
3) 提供一个检索产品的接口
4) 构造一个使用Builder接口的对象即在指导者的调用下创建产品实例
指导者(Director):————“收银员”  统一组装过程
       调用具体建造者角色以创建产品对象的各个部分。指导者并没有涉及具体产品类的信息,真正拥有具体产品的信息是具体建造者对象。它只负责保证对象各部分完整创建或按某种顺序创建。
产品角色(Product):——————“汉堡套餐”
       建造中的复杂对象。它要包含那些定义组件的类,包括将这些组件装配成产品的接口。
  
  
Product类
Builder接口  定义getProduct()
ConcreteBuilder实现Builer接口   具体实现Product
Director类   定义builder,执行builder.getProduct  

Computer
MacBook
Builder
MacBookBuilder
Director

链式调用
new TestBuilder().setA("A").setB("B").create();

android中使用:dialog组装信息,show()




windowManager
windowManagerGlobal
windowManagerService(WMS)
Surface
SurfaceFiling


studio中InnerBuilder插件可自动生成
(1)通过Context的getSystemService()
三、工厂模式
复杂对象
Product 抽象产品
ConcreteProductA 具体产品
ConcreteProductB 
concreteFactory:具体工厂类
Factory:抽象工厂类,  public adstract Product createProduct();
Client


建造者模式强调组装,工厂模式强调创建




interface Iterable<T>----Collection----List、Set
四、抽象工厂模式
四类方法
AbstractFactory:抽象工厂角色






























 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值