2017年3月24日16:38:39
结构型模式
描述如何将类或对象结合在一起形成更大的结构。
--分为类结构型模式、对象结构型模式。
几种结构性模式:
模式名 | -- |
---|---|
适配器模式 | Adapter |
桥接模式 | Bridge |
组合模式 | Composite |
装饰模式 | Decorator |
外观模式 | Facade |
享元模式 | FlyWeight |
代理模式 | Proxy |
这里我只学习几种常用的
适配器 组合 外观 代理
适配器模式:
类适配器 和 对象适配器
这里是对象适配器
这个用得比较多
package ninthTestModel;
/*
* 原来有一个程序 使用鸭子对象
* 现在想让他使用火鸡对象
* 写一个火鸡适配器 是使它看起来像鸭子...
*/
// -- 鸭子接口
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;
}
/*
* 相当于在适配器里面配置一个和原来类一样的方法 但是里面调用的是新的类的方法。
* (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();
}
//??需要使用鸭子对象
public static void testDuck(Duck duck) {
duck.quack();
duck.fly();
}
}
// 需要一个程序 用来使用
/*
* 有两个类 一个原先的使用类 一个最新的使用类
* 适配器的使用
* 给最新的使用类一个适配器 对它的方法进行封装
* 从而使当你使用适配器的时候
* 调用方法和原先类的调用方法一致
* 但是你实际调用的是最新类的方法。
*
*
*/
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---------测试适配器是否可以当做原先接口使用------\n");
testDuck(turckyAdapter);
}
}
输出结果:
------这是原先的使用--------
野鸭在叫...嘎嘎嘎
野鸭在飞...呼呼呼
------这是适配器的使用---------
野火鸡在叫...咕咕咕
野火鸡在飞...呼呼呼
---------测试适配器是否可以当做原先接口使用------
野火鸡在叫...咕咕咕
野火鸡在飞...呼呼呼