디자인 모델 - 구조 형 모델 총화 사례 (2)
4534 단어 디자인 모드
이 대상 에 대한 접근 을 제어 하기 위해 다른 대상 에 게 에이 전 트 를 제공 합 니 다.어떤 경우 에 한 대상 이 적합 하지 않 거나 다른 대상 을 직접 인용 할 수 없 으 며 대리 대상 은 클 라 이언 트 와 목표 대상 사이 에서 중개 역할 을 할 수 있다.
추상 적 인 역할: 실제 대상 과 대리 대상 의 공동 인 터 페 이 스 를 설명 합 니 다.
대리 역할: 대리 대상 역할 내부 에 실제 대상 에 대한 인용 이 포함 되 어 있어 실제 대상 을 조작 할 수 있 고 대리 대상 은 실제 대상 과 같은 인 터 페 이 스 를 제공 하여 언제든지 실제 대상 을 대체 할 수 있 습 니 다.또한 대리 대상 은 실제 대상 조작 을 수행 할 때 다른 조작 을 추가 할 수 있어 실제 대상 을 봉인 하 는 것 과 같다.
실제 역할: 대리 역할 이 대표 하 는 진실 한 대상 은 우리 가 최종 적 으로 인용 해 야 할 대상 이다.
인 스 턴 스 코드 - 정적 에이전트
package com.ruishenh.designPatter.structure.proxy;
public class ProxyClient {
public static void main(String[] args) {
ISell sell =new Proxy();
Computer c=sell.sellComputer();
System.out.println(" :"+c.getName());
}
}
//
interface ISell{
Computer sellComputer();
}
//
class Proxy implements ISell{
Merchant merchant=new Merchant();
@Override
public Computer sellComputer() {
return merchant.sellComputer();
}
}
//
class Merchant implements ISell{
@Override
public Computer sellComputer() {
return new Computer("DELL ");
}
}
class Computer{
String name;
public Computer(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
}
대리 모드 의 핵심 임 무 는 대상 의 정 체 를 숨 기 고 하나의 대리 로 모든 작업 을 완성 하 는 것 이다.어떤 의미 에서 볼 때 매우 좋 은 확장 성 을 증가 시 킬 수 있다.
인 스 턴 스 코드 - 동적 에이전트
package com.ruishenh.designPatter.structure.dynamicProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxyClient {
public static void main(String[] args) {
Merchant mc=new Merchant();
DynamicProxy<ISell> proxy = new DynamicProxy<ISell>(mc);
ISell sell= proxy.getProxy();
Computer c=sell.sellComputer();
System.out.println(" :"+c.getName());
}
}
//
interface ISell{
Computer sellComputer();
}
//
class DynamicProxy<T> implements InvocationHandler{
private T obj;
public DynamicProxy(T obj) {
this.obj = obj;
}
@SuppressWarnings("unchecked")
T getProxy(){
return (T) Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
before();
Object ret=method.invoke(obj, args);
after();
return ret;
}
void before(){System.out.println("before....");};
void after(){System.out.println("after....");};
}
//
class Merchant implements ISell{
@Override
public Computer sellComputer() {
return new Computer("DELL ");
}
}
class Computer{
String name;
public Computer(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
}
동적 에이 전 트 는 요청 에 대해 모든 처 리 를 할 수 있 습 니 다 (예 를 들 어 사무, 로그 등 입 니 다. 이것 은 모두 인터넷 에서 말 한 것 입 니 다. 저 는 당연히 모든 처 리 를 할 수 있 습 니 다). spring 에서 대량으로 응용 되 었 습 니 다.
어댑터 모드
하나의 인 터 페 이 스 를 고객 이 원 하 는 다른 인터페이스 로 전환 합 니 다. Adapter 모드 는 원래 인터페이스 가 호 환 되 지 않 아 함께 일 할 수 없 었 습 니 다.
목표 (Target) 캐릭터: 이것 이 바로 기대 하 는 인터페이스 입 니 다.
원본 (Adapee) 역할: 현재 적합 한 인터페이스 가 필요 합 니 다.
어댑터 (Adaper) 역할: 어댑터 류 는 이 모드 의 핵심 입 니 다.어댑터 가 원본 인 터 페 이 스 를 목표 인터페이스 로 변환 합 니 다.
package com.ruishenh.designPatter.structure.adapter;
public class AdapterClient {
public static void main(String[] args) {
Noodle target = new Adapter(new Thick());
target.getNoodle();
}
}
// -
interface Noodle {
public void getNoodle();
}
// adaptee
interface NoodleMachine{
void makeNoodle();
}
class Thick implements NoodleMachine {
@Override
public void makeNoodle() {
System.out.println(" ");
}
}
class Thin implements NoodleMachine {
@Override
public void makeNoodle() {
System.out.println(" ");
}
}
// ,
class Adapter implements Noodle{
public Adapter(NoodleMachine machine) {
this.machine = machine;
}
NoodleMachine machine;
@Override
public void getNoodle() {
machine.makeNoodle();
}
}
어댑터 모드 의 핵심 임 무 는 하나의 수요 인터페이스 와 다른 응답 인 터 페 이 스 를 연결 하 는 것 이다. 두 측 이 대응 하 는 프로그램 이 모두 변동 할 수 있 기 때문에 어댑터 모드 는 잘 확장 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.