PDHBE / study

기술 서적 Study
0 stars 0 forks source link

[GoF 디자인패턴] 브릿지(Bridge) 패턴 #11

Open leeyuunsung opened 2 years ago

leeyuunsung commented 2 years ago

브릿지 패턴 1부 - 패턴 소개

스크린샷 2021-11-15 오후 11 39 27

브릿지 패턴 2부 - 패턴 적용하기

Before

public class KDA아리 implements Champion {

    @Override
    public void move() {
        System.out.println("KDA 아리 move");
    }

    @Override
    public void skillQ() {
        System.out.println("KDA 아리 Q");
    }

    @Override
    public void skillW() {
        System.out.println("KDA 아리 W");
    }

    @Override
    public void skillE() {
        System.out.println("KDA 아리 E");
    }

    @Override
    public void skillR() {
        System.out.println("KDA 아리 R");
    }

    @Override
    public String getName() {
        return null;
    }
}
public class PoolParty아리 implements Champion {

    @Override
    public void move() {
        System.out.println("PoolParty move");
    }

    @Override
    public void skillQ() {
        System.out.println("PoolParty Q");
    }

    @Override
    public void skillW() {
        System.out.println("PoolParty W");
    }

    @Override
    public void skillE() {
        System.out.println("PoolParty E");
    }

    @Override
    public void skillR() {
        System.out.println("PoolParty R");
    }

    @Override
    public String getName() {
        return null;
    }
}

After

스크린샷 2021-11-16 오후 11 07 28
public class DefaultChampion implements Champion {

    private Skin skin;

    private String name;

    public DefaultChampion(Skin skin, String name) {
        this.skin = skin;
        this.name = name;
    }

    @Override
    public void move() {
        System.out.printf("%s %s move\n", skin.getName(), this.name);
    }

    @Override
    public void skillQ() {
        System.out.printf("%s %s Q\n", skin.getName(), this.name);
    }

    @Override
    public void skillW() {
        System.out.printf("%s %s W\n", skin.getName(), this.name);
    }

    @Override
    public void skillE() {
        System.out.printf("%s %s E\n", skin.getName(), this.name);
    }

    @Override
    public void skillR() {
        System.out.printf("%s %s R\n", skin.getName(), this.name);
    }

    @Override
    public String getName() {
        return null;
    }
}
public class 아리 extends DefaultChampion {

    public 아리(Skin skin) {
        super(skin, "아리");
    }
}
public static void main(String[] args) {
    Champion kda아리 = new 아리(new KDA());
    kda아리.skillQ();
    kda아리.skillW();
    Champion poolParty아리 = new 아리(new PoolParty());
    poolParty아리.skillR();
    poolParty아리.skillW();
}
leeyuunsung commented 2 years ago

브릿지 패턴 3부 - 장점과 단점

장점

단점

브릿지 패턴 4부 -자바와 스프링에서 찾아보는 패턴

Java

JDBC API, DriverManger 와 Driver

public static void main(String[] args) throws ClassNotFoundException {
    Class.forName ("org.h2.Driver");
    try (Connection conn = DriverManager.getConnection ("jdbc:h2:mem:~/test", "sa","")) {
        String sql =  "CREATE TABLE  ACCOUNT " +
                "(id INTEGER not NULL, " +
                " email VARCHAR(255), " +
                " password VARCHAR(255), " +
                " PRIMARY KEY ( id ))";
        Statement statement = conn.createStatement();
        statement.execute(sql);
          PreparedStatement statement1 = conn.prepareStatement(sql);
          ResultSet resultSet = statement.executeQuery(sql);
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
}

SLF4J, 로깅 퍼사드와 로거

public class Slf4jExample {

    private static Logger logger = LoggerFactory.getLogger(Slf4jExample.class);

    public static void main(String[] args) {
        logger.info("hello logger");
    }
}

Spring

public static void main(String[] args) {
    MailSender mailSender = new JavaMailSenderImpl();
    PlatformTransactionManager platformTransactionManager = new JdbcTransactionManager();
}