2017年3月24日16:38:39
結(jié)構(gòu)型模式
描述如何將類或?qū)ο蠼Y(jié)合在一起形成更大的結(jié)構(gòu)。
--分為類結(jié)構(gòu)型模式、對(duì)象結(jié)構(gòu)型模式。
幾種結(jié)構(gòu)性模式:
模式名 | -- |
---|---|
適配器模式 | Adapter |
橋接模式 | Bridge |
組合模式 | Composite |
裝飾模式 | Decorator |
外觀模式 | Facade |
享元模式 | FlyWeight |
代理模式 | Proxy |
這里我只學(xué)習(xí)幾種常用的
適配器 組合 外觀 代理
適配器模式:
類適配器 和 對(duì)象適配器
這里是對(duì)象適配器
這個(gè)用得比較多
package ninthTestModel;
/*
* 原來有一個(gè)程序 使用鴨子對(duì)象
* 現(xiàn)在想讓他使用火雞對(duì)象
* 寫一個(gè)火雞適配器 是使它看起來像鴨子...
*/
// -- 鴨子接口
interface Duck{
public void quack();
public void fly();
}
// -- 野鴨
class MalardDuck implements Duck{
@Override
public void quack() {
// TODO Auto-generated method stub
System.out.println("野鴨在叫...嘎嘎嘎");
}
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("野鴨在飛...呼呼呼");
}
}
// --火雞接口
interface Turcky{
public void gobble();
public void fly();
}
class WildTurcky implements Turcky{
@Override
public void gobble() {
// TODO Auto-generated method stub
System.out.println("野火雞在叫...咕咕咕");
}
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("野火雞在飛...呼呼呼");
}
}
// --火雞適配器
class TurckyAdapter implements Duck{
Turcky turcky;//火雞
public TurckyAdapter(Turcky turcky) {
// TODO Auto-generated constructor stub
this.turcky=turcky;
}
/*
* 相當(dāng)于在適配器里面配置一個(gè)和原來類一樣的方法 但是里面調(diào)用的是新的類的方法。
* (non-Javadoc)
* @see ninthTestModel.Duck#quack()
*/
@Override
public void quack() {
// TODO Auto-generated method stub
turcky.gobble();
}
@Override
public void fly() {
// TODO Auto-generated method stub
turcky.fly();
}
//??需要使用鴨子對(duì)象
public static void testDuck(Duck duck) {
duck.quack();
duck.fly();
}
}
// 需要一個(gè)程序 用來使用
/*
* 有兩個(gè)類 一個(gè)原先的使用類 一個(gè)最新的使用類
* 適配器的使用
* 給最新的使用類一個(gè)適配器 對(duì)它的方法進(jìn)行封裝
* 從而使當(dāng)你使用適配器的時(shí)候
* 調(diào)用方法和原先類的調(diào)用方法一致
* 但是你實(shí)際調(diào)用的是最新類的方法。
*
*
*/
public class AdapterModel {
public static void testDuck(Duck duck) {
duck.quack();
duck.fly();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//原先的使用
System.out.println("\n------這是原先的使用--------\n");
Duck duck=new MalardDuck();
duck.quack();
duck.fly();
System.out.println("\n------這是適配器的使用---------\n");
//適配器的使用
Turcky turcky=new WildTurcky();
Duck turckyAdapter=new TurckyAdapter(turcky);
turckyAdapter.quack();
turckyAdapter.fly();
System.out.println("\n---------測(cè)試適配器是否可以當(dāng)做原先接口使用------\n");
testDuck(turckyAdapter);
}
}
輸出結(jié)果:
------這是原先的使用--------
野鴨在叫...嘎嘎嘎
野鴨在飛...呼呼呼
------這是適配器的使用---------
野火雞在叫...咕咕咕
野火雞在飛...呼呼呼
---------測(cè)試適配器是否可以當(dāng)做原先接口使用------
野火雞在叫...咕咕咕
野火雞在飛...呼呼呼